#  falsk 学习来自：
# https://www.runoob.com/flask/flask-basic-concept.html


from flask import Flask, request, make_response,render_template

# 在渲染模版的时候，默认会从项目根目录下的templates目录下查找模版。
# template_folder 用于指定Jinja2 模板路径
app = Flask(__name__, template_folder="../tmpl")


# Flask 通过特有的装饰器提供路由
@app.route("/")
def home():
    return "您好, Flask!"

# 路由是 URL 到 Python 函数的映射。Flask 允许你定义路由，这样当特定的 URL 被访问时，就会调用相应的函数。
@app.route("/about")
def about():
    return "关于Flask....."

# 视图函数是处理请求并返回响应的 Python 函数。它们通常接收请求对象作为参数，并返回响应对象，或者直接返回字符串、HTML 等内容。
@app.route("/greet/<name>")
def greet(name):
    return f"Flask, {name}"

# 请求对象包含了客户端发送的请求信息，包括请求方法、URL、请求头、表单数据等。
# Flask 提供了 request 对象来访问这些信息。
@app.route("/submit", methods=['POST'])
def submit():
    username = request.form.get("username")
    return f"Hello, {username}"

# 响应对象包含了发送给客户端的响应信息，包括状态码、响应头和响应体。Flask 默认会将字符串、HTML 直接作为响应体。
@app.route("/custom")
def custom():
    # 创建一个自定义响应对象，并设置响应头 X-Custom-Header。
    res = make_response("custom response")
    # 自定义响应. 
    res.headers['X-Custom-Header'] = "custom response" # TODO: 目前不能支持中文，需要进一步改进
    return res

@app.route("/hello/<name>")
def hello(name):
    # return render_template('./tmpl/hello.html', name = name) # TODO: 该方式路径不行，待进一步搞明白
    return render_template('hello.html', name = name)

def main():
    app.run(debug= True)

if __name__ == "__main__":
    main()
